	/* Mise en oeuvre contigue d'une liste d'entiers */

#include "meoliste.h"

void init_liste(t_liste* p)
{	
	t_element* drapeau;
	t_element* ec;
	p->drapeau = drapeau;
	p->ec = ec;
	p->drapeau=(t_element*)malloc(sizeof(t_element));
	p->drapeau->pred=p->drapeau;
	p->drapeau->succ=p->drapeau;
	p->ec = p->drapeau;
}

int liste_vide(t_liste* p)
{
	return (p->drapeau->succ==p->drapeau||p->drapeau->pred==p->drapeau);
}

int hors_liste(t_liste* p)
{	return(p->ec==p->drapeau);
}

void en_tete(t_liste* p)
{	if(!liste_vide(p)) { p->ec = p->drapeau->succ; }
}

void en_queue(t_liste* p)
{	if(!liste_vide(p)) p->ec = p->drapeau->pred;
}

void precedent(t_liste* p)
{	if(!hors_liste(p)) p->ec = p->ec->pred;
}

void suivant(t_liste* p)
{	if(!hors_liste(p)) p->ec = p->ec->succ;
}

void valeur_elt(t_liste* p, t_rattaupes *e)
{	
	if(!hors_liste(p))
		*e = p->ec->rattaupes;
}

void modif_elt(t_liste* p, t_rattaupes v)
{	if(!hors_liste(p)) p->ec->rattaupes=v;
}

void oter_elt(t_liste* p)
{
	if(!hors_liste(p))
	{	
		t_element *temp;
		temp=p->ec;
		p->ec->succ->pred=p->ec->pred;
		p->ec->pred->succ=p->ec->succ;
		p->ec=p->ec->pred;
		free(temp);
	}
}

void ajout_droit(t_liste* p, t_rattaupes e)
{
	if(liste_vide(p)||!hors_liste(p))
	{	
		t_element *nouv;
		nouv=(t_element*)malloc(sizeof(t_element));
		nouv->rattaupes=e;
		nouv->succ=p->ec->succ;
		nouv->pred=p->ec;
		p->ec->succ->pred=nouv;
		p->ec->succ=nouv;
		p->ec=nouv;
	}
}

void ajout_gauche(t_liste* p, t_rattaupes e)
{
	if(liste_vide(p)||!hors_liste(p))
	{
		t_element *nouv;
		nouv=(t_element*)malloc(sizeof(t_element));
		nouv->rattaupes=e;
		nouv->pred=p->ec->pred;
		nouv->succ=p->ec;
		p->ec->pred->succ=nouv;
		p->ec->pred=nouv;
		p->ec=nouv;
	}
}

